The process of developing and testing software continues to increase in complexity. In fact, applications can take so long to build, much less test, that requirements can change before the application is completed, resulting in wasted time or worse, wasted time and an unusable system. To address the software development aspects of these problems, Rapid Application Development (RAD) was introduced. RAD refers to a process intended to speed up the development process. It is based on concepts of iterative development, construction of prototypes, and use of Computer-Aided Software Engineering (CASE) tools. The RAD approach typically involves compromises in usability, features, and/or execution speed. Although use of the RAD approach often increases the speed of development and reduces complexity, end-user functionality often suffers because of a narrower design focus, and frequently scalability is lost.
RAD tools typically require a design-and-code phase which is taken to some degree of completion, and then the code is compiled and linked into an executable file before testing with (typically simulated) data during a runtime phase. Thus, a developer has to wait until runtime to see if the application works as expected. If it does not, development returns to the design-and-code phase and the process continues.
Software testing includes the process of executing a program or application with the intent of finding errors and is intended to measure the quality of the developed software. It also encompasses providing information about the quality of the product with respect to the context in which it is intended to operate. Although there are many approaches to software testing, effective testing of complex products depends on using test data that faithfully reflects the type of data upon which the software will act and using that data in an environment like the one in which the software will run. Hence it may be helpful to design and test scenarios, where a scenario may be described as an instantiation of a use case (taking a specific path through the model, and assigning context-specific values to each variable). More complex tests can be built up by designing a test that runs through a series of scenarios. Unfortunately, obtaining or generating such data for scenario testing is not easy. Even if “live data” is available, security considerations may render that data unavailable.